<?php
namespace Admin\Controller;
use Think\Controller;

class CommonController extends Controller{
	//标识为是否要进行权限认证  false:超级管理员
	public $is_check_rule = true;
	//保存用户信息
	Public $user = [];

	public function __construct(){
		//执行父类构造方法
		parent::__construct();
		$admin = cookie("admin");
		//验证是否登录
		if(!$admin){
			$this->error("没有登录",U("Login/login"));
		}

		//从缓存中读取信息
		$this->user = S("user_".$admin["id"]);
		if(!$this->user){
			//将用户信息存到user属性
			$this->user = $admin;
			//获取到登录账号对应的角色ID 将角色ID存储到user中去
			$role_info = M("AdminRole")->where("admin_id=".$admin["id"])->find();
			$this->user["role_id"]= $role_info["role_id"];

			$ruleModel = D("Rule");
			//根据角色信息获取到对应的权限信息
			if($role_info["role_id"] == 1){
				//超级管理员
				$this->is_check_rule = false;
				$rule_list = $ruleModel->select();
			}else{
				//普通管理员
				//根据角色获取到权限id
				$rules = D("RoleRule")->getRules($role_info["role_id"]);
				//二维数组转换为一维数组
				foreach ($rules as $key => $value) {
					$rule_ids[] = $value["rule_id"];
				}
				//转换为字符串以便使用in语法
				$rule_ids = implode(",", $rule_ids);
				//根据权限id 获取到对应的权限
				$rule_list = $ruleModel->where("id in ($rule_ids)")->select();
			}
			
			//将用户对应的权限信息格式化为一维数组保存到user中
			foreach ($rule_list as $key => $value) {
				//拼接权限
				$this->user["rules"][] = strtolower($value["module_name"]."/".$value["controller_name"]."/".$value["action_name"]);
				//导航菜单的显示
				if($value["is_show"]==1){
					$this->user["menus"][] = $value;
				}
			}
			//信息写入缓存
			S("user_".$admin["id"],$this->user);
		}
		
		//针对超级管理员不进行权限认证
		if($this->user["role_id"] == 1){
			$this->is_check_rule = false;
		}

		//dump($this->user);
		//如果是普通管理员 则获取当前请求的URL   权限认证
		if($this->is_check_rule){
			//追加默认具备权限
			$this->user["rules"][] = "admin/index/index";
			$this->user["rules"][] = "admin/index/nav";
			$this->user["rules"][] = "admin/index/nav_left";
			$this->user["rules"][] = "admin/index/content";

			$action = strtolower(MODULE_NAME."/".CONTROLLER_NAME."/".ACTION_NAME);
			//检查数组中是否存在指定的值
			if(!in_array($action, $this->user["rules"])){
				if(IS_AJAX){
					$this->ajaxReturn(array("status"=>0,"msg"=>"没有权限"));
				}else{
					echo "没有权限";
					die();
				}
			}
		}
	}
}
?>